MacTraceroute is a program that attempts to trace the route an IP packet would
follow to some internet host. It is not guaranteed to be 100% accurate, but
more often than not is close enough to reality to assist in debugging network
problems.
How much does it cost?:
Nothing. MacTraceroute and the associated Traceroute Ethernet LAP are free. You
can do anything you want with them except incorporate them into a commercial
product without my written permission. Public domain, shareware, and SUMEX-like
CD collections, however, may include both packages on their product.
What's new with this release?:
1) Added icons drawn by Jonathan J. Vafai.
2) Found a double dispose bug. Should fix a lot of the crashes seen on PowerMacs.
3) Found a bug in the source port generation code. Should fix the "simultaneous traces act a little weird" bug.
4) More verbose error messages. Hopefully I'll never have to type "Select the TR Ethernet icon in your MacTCP Control panel and reboot" again.
5) Domain names should display more readily. Before you had to sometimes force an update to get some of the domain names to display.
6) Hitting the "Traceroute" button with no host specified just dismisses the dialog.
7) Fixed a misspelling in the DNS Error dialog.
8) Widened the New Traceroute dialog to accomidate larger domain names for the destination host.
Any known bugs in 1.1?:
1) Some visual problems with the trace window: Horizontal scroll bar
problems. Sometimes updates aren't drawing everything.
What do you plan for future versions?:
1) Add some optional parameters to the "traceroute" appleevent.
2) Make New Trace dialog moveable modal.
3) Implement pinging of hops.
4) Incorporate Adam Goodfellow's nifty path MTU discovery code.
Does it work with OpenTransport?:
No. The next release of MacTraceroute will support OpenTransport.
Does it work with PPP?:
If you are using MacSlip 3.0, yes. If you are using FreePPP, wait for 3.0. I'm a
member of the FreePPP Group and am working on Traceroute support in 3.0. If you are
using anything else for PPP, don't. Use FreePPP! :)
What are the features?
MacTraceroute implements almost all of the features supported by the UNIX
traceroute command. MacTraceroute does not currently support the Loose
Source Record Route option of traceroute.
How do I use it?:
First, hit command-n to bring up a new traceroute dialog. Type in the host
name or IP address of the host you wish to attempt to traceroute to. The
remaining fields in the dialog require some explanation:
Max TTL: This specifies the maximum ttl traceroute should use in
its outgoing probes. This usually coincides with the
number of hops, but not neccessarily.
Timeout per Probe: This specifies the number of seconds to wait for a
response to a probe.
Probes per TTL: This specifies the number of probes to send with a given
TTL value. Usually is Probers per hop, but not always.
Starting Port: This specifies the UDP port number that MacTraceroute will
start the probes at. If something on the target machine is
using a port at or just above this port number, traceroute may
fail to work correctly. If you suspect this to be the problem,
try a different starting port. This field is automatically
filled with a random number.
Resolve IP Addresses: If this is checked, MacTraceroute will try a reverse
DNS lookup on the ip addresses of each hop.
Loose Source Record Route: Currently not supported.
The remaining fields can be used to set certain bits in the probes' IP
header. Reference RFC 791 for a complete description of these fields.
They are, in my opinion, self explanatory.
After you hit the "Traceroute" button, a window will appear showing the results
of the traceroute. The number on the left is the hop number. To the right of
this is the IP address of the hop, and optionally the DNS name of the hop.
To the right of this information is the round trip time for each probe.
When the trace is completed, the window title will have a "•" inserted at the
beginning.
A few other things can appear in place of round trip times:
!SE An error occurred when attempting to send the probe
* A timeout occurred waiting for the probe to return
!N A network unreachable condition was reported
!H A host unreachable condition was reported
!P A protocol unreachable condition was reported
!S A source route failure occurred
!F A fragmentation needed condition was reported (Shouldn't happen)
How does it work?:
MacTraceroute works by sending UDP packets with a destination IP address of the
host you wish to trace to, and an artificially low TTL field. When a gateway or
router forwards an IP packet, it decrements the TTL field. When the TTL field
is decremented to zero, an ICMP Time Exceeded error message is sent to the
originating host. Thus, by sending out UDP packets with TTLs of 1,2,3, and so
on, and listening for the ICMP error messages, you can determine the route the
packets are taking to the host in question. This method is not 100% reliable,
for reasons beyond the scope of this document. It works well enough for most
uses. MacTraceroute requires a special LAP for MacTCP since MacTCP does not
allow applications to modify the TTL field of packets, nor does it give
applications direct access to ICMP messages.
Who should I sue if it destroys my machine?:
Not me. The MacTraceroute application and the Traceroute Ethernet LAP have no warranty
whatsoever. I have tried to eliminate all of the bugs from the code, but I probably
will never eliminate them all. If MacTraceroute or the LAP damage your machine in any
way, I am sorry, but I cannot be held liable. If you think it stinks just remember:
You get what you pay for.
Who should we thank?:
First and foremost, the legendary Van Jacobsen (van@helios.ee.lbl.gov). This
application was inspired by and is directly derived from the code of Van Jacobsen's
traceroute.
VJ thanks Steve Deering, C. Phillip Wood, Tim Seaver, and Ken Adelman in the
traceroute man page, so you should too.
I would like to thank Blaine Kubesh for bugging me to work on the MacTraceroute
application and the Traceroute Ethernet LAP. I'd also like to thank Apple for
producing A/UX, a UNIX implementation so crappy it drove me to port traceroute
to MacOS. Without A/UX, I'd probably be happy to continue running traceroute
on my local UNIX box.
As with everything I program, Matt Elliott for being such a nagging pain. I
probably would just watch TV all day if it weren't for Matt bitching at me. ;)
I should also thank Steve Dorner for exclaiming 'Why in the hell are you doing
that there?' (paraphrased) about my LDEF code. He put me onto the trail of some
updating bugs that have plauged many of my programs.
The following people submitted bug reports that led to the fixes you see in 1.1. I thank all of them for taking the time to mail me:
Brian Yates
Simon Rumble, who stated "May the Goddess of nubile young virgins always shine in your path."
William W. Fisher
Who wrote this?:
MacTraceroute was written by Jim Browne (jbrowne@jbrowne.com). Jim likes all things
related to Led Zeppelin and frisbee (which is a brand name and registered trademark
of the wham-o mfg. company). Jim doesn't mind getting bug reports and wish list
suggestions via email, so long as they contain "Traceroute" in their subject so
Eudora can filter them to the proper mailbox. Beginning with the writing of this
file, Jim apparently likes referring to himself in the third person.
What else has Jim Browne written?:
DNSLib: A library that makes working with MacTCP's DNR much easier by providing application-time callbacks for DNR responses, queueing of DNR requests, and handling of N concurrent DNR questions. MacTraceroute and MacFSP use this library. Note: This has nothing to do with ASLM, SOM, etc.
MacFSP: A Macintosh client for the FSP protocol.
TuboUDP: A library that makes writing UDP code under MacTCP much easier.
During my short stint at Sonic Systems, Inc., I wrote the SonicPPP client, co-designed the interface for the manager of Sonic's QuickStream with Chris Russo (5 diamonds, MacWeek 1/29/96), wrote most of Sonic's Macintosh based PPP server, and helped debug the QuickStream.
In a former life, I worked on two little known programs: NCSA Telnet and NCSA Mosaic… you probably haven't heard of either of them.
What horrid bugs existed in former versions?:
Version 1.0 (2/4/95):
1) Zoomed windows are constrained to available desktop.
2) Now using System 7's new window stagger function since it's there.
3) Probes per TTL used actually matches value in New Traceroute dialog, rather than using one less than the value entered.
4) When traces are started when MacTraceroute is in the background (i.e. from an AppleEvent), windows have inactive scrollbars (as they should).
5) Trace times are now "attached" to the right side of the window.
6) Results of traces may now be copied to the clipboard.
7) Fixed the application icon masks.
Version 1.0b1 (12/23/94):
1) DNS errors from the destination host lookup produce an error dialog.
2) About Dialog is now centered.
3) Horizontal window growth is now bounded.
4) Removed "Probes Per TTL" from info bar as it was redundant.
5) Zoom box has been added.
6) Support for the four required appleevents added.
7) Support for a "traceroute" appleevent.
Version 1.0d4 (11/22/94):
1) Fixed the corruption bug that was causing intermittent crashes.
2) Fixed the "crash if you close an active traceroute window" bug.
3) Fixed the updating bugs.
4) Text is no longer clipped at the bottom (losing the bottom of a "g", etc.)
5) First hop is no longer duplicated.
6) Target hop results are now displayed.
7) Scroll bar strangeness has been corrected.
Version 1.0d3 (11/4/94):
1) New interface.
2) Optional inverse DNS lookups of hops.
3) Fixed "crash on second trace" bug.
4) More than one traceroute allowed at a time.
5) Precedence and Type of Service implemented
Version 1.0d2 (7/30/94):
This release fixes a bug in the source IP address in the outgoing traceroute
probes.
Version 1.0d1 (7/29/94):
This is the first time this code has left my machine in any capacity.